package com.weai.portal.util;

import lombok.extern.slf4j.Slf4j;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * 周报提示词工具类
 * 用于构建AI生成周报的提示词
 */
@Slf4j
public class WeeklyReportPrompt {

    /**
     * 构建周报提示词
     * @param yearMonth 年月
     * @param weekRange 周范围
     * @param totalCount 总任务数
     * @param todoCount 待办任务数
     * @param inProgressCount 进行中任务数
     * @param doneCount 已完成任务数
     * @param progressProjects 进展顺利的项目数据 
     * @param problemProjects 存在问题的项目数据
     * @param businessProjects 业务需求项目
     * @param techProjects 科技专项项目
     * @return 格式化的提示词
     */
    public static String buildPrompt(
            String yearMonth,
            String weekRange,
            long totalCount,
            long todoCount,
            long inProgressCount,
            long doneCount,
            String progressProjects,
            String problemProjects,
            List<Map<String, String>> businessProjects,
            List<Map<String, String>> techProjects
    ) {
        // 构建业务需求数据
        String businessProjectsHtml = formatProjects(businessProjects);
        
        // 构建科技专项数据
        String techProjectsHtml = formatProjects(techProjects);

        // 构建提示词
        return String.format("""
                你现在是一位专业的周报生成器。我需要你根据提供的数据生成一个标准的HTML周报。
                
                非常重要：必须确保生成完整的HTML代码，包括所有必要的开始和结束标签。任何超长的HTML响应都必须确保 </body> 和 </html> 标签正确闭合。
                
                请根据以下内容生成HTML格式的周报，不要添加任何解释性文字：
                
                报告基础信息：
                - 年月：%s
                - 周期：%s
                - 总项目数：%d
                - 待办任务数：%d
                - 进行中任务数：%d
                - 已完成任务数：%d
                
                进展顺利的项目：
                %s
                
                主要问题与风险：
                %s
                
                业务需求项目明细：
                %s
                
                科技专项项目明细：
                %s
                
                请遵循以下HTML结构和CSS样式要求：
                
                1. HTML报告必须包含<!DOCTYPE html>、<html>、<head>和<body>等基本标签
                2. 页面主题为「AI虚拟架构组%s周工作总结」且一定居中展示，字体加粗
                3. CSS样式要求：
                   - 使用蓝色作为主色调(#1e3d7b)
                   - 报告主体宽度为80%%
                   - 字体使用系统默认字体，主体字号为14px
                   - 表格使用白色背景，有轻微圆角和阴影
                   - 表头使用深蓝色背景，白色文字
                   - 表格单元格有边框和合适的内边距
                   - 报告内容分为几个板块，每个板块有标题和内容区域
                   - 进度标签使用不同颜色区分（例如：已完成-绿色，进行中-蓝色，待办-灰色）
                   - 自动调整表格宽度和高度以适应内容,表头不能换行
                
                4. HTML报告结构必须包含：
                   - 页面标题和周期信息
                   - 项目统计信息
                   - 进展顺利的项目列表（使用绿色标记）
                   - 主要问题与风险列表（使用黄色或红色标记）
                   - 业务需求项目详情表格（包含子类型、项目名称、业务部门、业务目标、进展、AI总结、AI评价、负责人等列;同一子类型要合并居中显示）
                   - 科技专项项目详情表格（包含子类型、项目名称、业务部门、业务目标、进展、AI总结、AI评价、负责人等列;同一子类型要合并居中显示）
                
                请注意：
                1. 生成纯HTML文件，包含内联CSS样式，不需要外部依赖
                2. 确保HTML满足W3C规范，可以在浏览器中正常显示
                3. 合理使用颜色和布局增强可读性
                4. 如果数据为空，显示「暂无数据」而不要留空
                5. 确保表格有合适的表头和内容对齐方式
                6. 最重要的是，无论内容多长，都确保HTML代码完整闭合
                
                只生成HTML代码，不要有任何解释或Markdown标记。报告风格应专业、美观且具有可读性。
                请在生成的HTML代码最后检查是否包含</body>和</html>标签，确保它们正确闭合。
                """,
                yearMonth, 
                weekRange,
                totalCount, 
                todoCount, 
                inProgressCount, 
                doneCount,
                progressProjects,
                problemProjects,
                businessProjectsHtml,
                techProjectsHtml,
                yearMonth
        );
    }
    
    /**
     * 格式化项目列表数据
     * @param projects 项目列表
     * @return 格式化后的HTML字符串
     */
    private static String formatProjects(List<Map<String, String>> projects) {
        if (projects == null || projects.isEmpty()) {
            return "暂无数据";
        }
        
        // 按子类型分组
        Map<String, List<Map<String, String>>> projectsByType = projects.stream()
                .collect(Collectors.groupingBy(p -> p.getOrDefault("subType", "未分类")));
        
        StringBuilder result = new StringBuilder();
        
        // 遍历每个子类型
        for (Map.Entry<String, List<Map<String, String>>> entry : projectsByType.entrySet()) {
            String subType = entry.getKey();
            List<Map<String, String>> typeProjects = entry.getValue();
            
            result.append("<strong>【").append(subType).append("】</strong>").append("\n");
            
            // 添加子类型下的项目
            for (Map<String, String> project : typeProjects) {
                result.append("- 项目名称：").append(project.getOrDefault("title", "无")).append("\n");
                result.append("- 业务部门：").append(project.getOrDefault("busidepart", "无")).append("\n");
                result.append("- 业务目标：").append(project.getOrDefault("busigoal", "无")).append("\n");
                result.append("- 进展：").append(project.getOrDefault("progress", "")).append("\n");
                result.append("- AI总结：").append(project.getOrDefault("summary", "")).append("\n");
                result.append("- AI评价：").append(project.getOrDefault("rating", "")).append("\n");
                result.append("- 负责人：").append(project.getOrDefault("receiver", "")).append("\n\n");
            }
        }
        
        return result.toString();
    }
} 